home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / cdity / ModeProSrc.lha / Daemon / MPModeNames.c < prev    next >
C/C++ Source or Header  |  1997-04-30  |  3KB  |  119 lines

  1. #include "mp.h"
  2. #include <graphics/displayinfo.h>
  3.  
  4. ULONG GetMonitorName(ULONG DisplayID, STRPTR Buffer, ULONG BufferLen);
  5.  
  6. STRPTR GetModeName(ULONG DisplayID)
  7. {
  8.   ULONG   deflen,
  9.           len,
  10.           monlen;
  11.   UBYTE   monname[40];
  12.   STRPTR  retval=0;
  13.   struct  NameInfo    nameinfo;
  14.  
  15.   STRPTR  deflabel;
  16.  
  17.   deflabel=GetString(MSG_OLD_SCREENMODES);
  18.   deflen  =strlen(deflabel);
  19.   deflen  =((DisplayID & MONITOR_ID_MASK) ? 0 : deflen); 
  20.   
  21.   {
  22.     if(GetDisplayInfoData(0,(UBYTE *)&nameinfo,sizeof(nameinfo), DTAG_NAME, DisplayID)>0)
  23.     {
  24.       if(nameinfo.Name)
  25.       {
  26.         if(retval=AllocVec(strlen(nameinfo.Name)+1+deflen,MEMF_PUBLIC))
  27.         {
  28.           if(deflen)
  29.             strcpy(retval,deflabel);
  30.           strcpy(&retval[deflen], nameinfo.Name);
  31.         }
  32.       }
  33.     }
  34.   
  35.     /* Attempt  Monitor: Width x Height */
  36.     if(!retval)
  37.     {
  38.       struct DimensionInfo diminfo;
  39.       struct  DisplayInfo dispinfo;
  40.   
  41.       if(monlen=GetMonitorName(DisplayID,monname,40))
  42.       {
  43.         if((GetDisplayInfoData(0,(UBYTE *)&diminfo ,sizeof(diminfo) , DTAG_DIMS, DisplayID)>0) && 
  44.            (GetDisplayInfoData(0,(UBYTE *)&dispinfo,sizeof(dispinfo), DTAG_DISP, DisplayID)>0) )
  45.         {
  46.           len=monlen + deflen + 39 +1;
  47.           // "#### x #### AA LACED HAM EHB DUALPF PF2" 39
  48.           if(retval=AllocVec(len,MEMF_PUBLIC))
  49.           {
  50.             if(deflen)
  51.                strcpy(retval,deflabel);
  52.             sprintf(&retval[deflen],"%s:%4d x %4d",
  53.                             monname,
  54.                             (diminfo.Nominal.MaxX+1) & 0xffff,
  55.                             (diminfo.Nominal.MaxY+1) & 0xffff);
  56.             /*
  57.             if(dispinfo.PropertyFlags & DIPF_IS_)
  58.               strcat(retval,"");
  59.             */
  60.             /*
  61.             if(dispinfo.PropertyFlags & DIPF_IS_AA)
  62.               strcat(retval," AA");
  63.             */
  64.             
  65.             if(dispinfo.PropertyFlags & DIPF_IS_DUALPF)
  66.               strcat(retval," DPF");
  67.             
  68.             if(dispinfo.PropertyFlags & DIPF_IS_PF2PRI)
  69.               strcat(retval," PF2");
  70.  
  71.             if(dispinfo.PropertyFlags & DIPF_IS_HAM)
  72.               strcat(retval," HAM");
  73.               
  74.             if(dispinfo.PropertyFlags & DIPF_IS_EXTRAHALFBRITE)
  75.               strcat(retval," EHB");
  76.             
  77.             if(dispinfo.PropertyFlags & DIPF_IS_LACE)
  78.               strcat(retval," Laced");
  79.             
  80.           }
  81.         }
  82.       }
  83.     }
  84.    
  85.     /* Last ditch effort, just display the DisplayID in hex */
  86.     if(!retval)  
  87.       if(retval=AllocVec(12,MEMF_PUBLIC))
  88.         sprintf(retval,"ID:%8x",DisplayID);
  89.   }
  90.   return(retval);
  91. }
  92.  
  93.  
  94. ULONG GetMonitorName(ULONG DisplayID, STRPTR Buffer, ULONG BufferLen)
  95. {
  96.   struct MonitorSpec *monspec;
  97.   ULONG rv=0;
  98.   
  99.   if(monspec=OpenMonitor(0,DisplayID & MONITOR_ID_MASK))
  100.   {
  101.     strncpy(Buffer,monspec->ms_Node.xln_Name,BufferLen);
  102.     BufferLen--;
  103.     Buffer[BufferLen]=0;
  104.       
  105.     // copy mon name an capitalize     
  106.     for(rv=0;rv<BufferLen && Buffer[rv]!=0;rv++)
  107.     {
  108.       Buffer[rv]=ToUpper(Buffer[rv]);
  109.       if(Buffer[rv]=='.')
  110.          Buffer[rv]=0;
  111.     }
  112.     Buffer[BufferLen]=0;
  113.   
  114.     CloseMonitor(monspec);
  115.   }
  116.   return(rv);
  117. }
  118.  
  119.